Imports System.Data.SqlClient
''' <nombre>
''' Condicion de I.V.A.
''' </nombre>
Public Class cls_condicioniva_

    Implements ICloneable

#Region "Variables ..."
    Private int_idcondicioniva As Integer = 0
    Private str_nombre As String = ""
    Private str_nombrecorto As String = ""
    Private int_idregistro As Integer = 0
    Private int_idsiglafiscal As Integer = 0

    Private str_subcodigo1 As String = ""
    Private str_subcodigo2 As String = ""
    Private str_subcodigo3 As String = ""

    Private bit_documentoA As Boolean
    Private bit_documentoB As Boolean
    Private bit_documentoC As Boolean


    Private obj_siglafiscal As cls_siglafiscal_ = Nothing
    Private obj_registro As cls_registro_ = Nothing

    Private col_Items As Collections.Generic.List(Of cls_condicioniva_) = Nothing
#End Region

    Public Overrides Function ToString() As String
        Select Case str_formatoCombos
            Case "Nombre#########(15) - sigla(5)"
                Return nombre.PadRight(15) & " - " & nombrecorto.PadRight(5)
            Case "sigla(5) - Nombre#########(15)"
                Return nombrecorto.PadRight(5) & " - " & nombre.PadRight(15)
            Case "Nombre - sigla"
                Return nombre & " - " & nombrecorto
            Case "sigla - Nombre"
                Return nombrecorto & " - " & nombre
            Case "Nombre"
                Return nombre
            Case "sigla"
                Return nombrecorto
            Case Else
                Return nombre
        End Select
    End Function

#Region "Propiedades ..."
    ReadOnly Property This
        Get
            Return Me
        End Get
    End Property
    ReadOnly Property ThisDescripcion As String
        Get
            Return Me.ToString
        End Get
    End Property
    ReadOnly Property pKey
        Get
            Return idcondicioniva
        End Get
    End Property
    ''' <id>
    ''' True
    ''' </id>
    Property idcondicioniva() As Integer
        Get
            idcondicioniva = int_idcondicioniva
        End Get
        Set(ByVal value As Integer)
            int_idcondicioniva = value
        End Set
    End Property
    ''' <nombre>
    ''' Nombre
    ''' </nombre>
    Property nombre() As String
        Get
            nombre = str_nombre
        End Get
        Set(ByVal value As String)
            str_nombre = value
        End Set
    End Property
    ''' <nombre>
    ''' Nombre corto
    ''' </nombre>
    Property nombrecorto() As String
        Get
            nombrecorto = str_nombrecorto
        End Get
        Set(ByVal value As String)
            str_nombrecorto = value
        End Set
    End Property
    Property idregistro() As Integer
        Get
            idregistro = int_idregistro
        End Get
        Set(ByVal value As Integer)
            int_idregistro = value
        End Set
    End Property
    ''' <nombre>
    ''' Identificador
    ''' </nombre>
    Property idsiglafiscal() As Integer
        Get
            idsiglafiscal = int_idsiglafiscal
        End Get
        Set(ByVal value As Integer)
            int_idsiglafiscal = value
        End Set
    End Property
    ''' <importar>
    ''' True
    ''' </importar>
    Property siglafiscal() As cls_siglafiscal_
        Get
            If IsNothing(obj_siglafiscal) Then
                obj_siglafiscal = New cls_siglafiscal_
                If Not obj_siglafiscal.Buscar(idsiglafiscal) Then
                    obj_siglafiscal = Nothing
                End If
            End If
            siglafiscal = obj_siglafiscal
        End Get
        Set(ByVal value As cls_siglafiscal_)
            obj_siglafiscal = value
        End Set
    End Property

    Property subcodigo1 As String
        Get
            subcodigo1 = str_subcodigo1
        End Get
        Set(value As String)
            str_subcodigo1 = value
        End Set
    End Property

    Property subcodigo2 As String
        Get
            subcodigo2 = str_subcodigo2
        End Get
        Set(value As String)
            str_subcodigo2 = value
        End Set
    End Property
    Property subcodigo3 As String
        Get
            subcodigo3 = str_subcodigo3
        End Get
        Set(value As String)
            str_subcodigo3 = value
        End Set
    End Property

    Property documentoA As Boolean
        Get
            documentoA = bit_documentoA
        End Get
        Set(ByVal value As Boolean)
            bit_documentoA = value
        End Set
    End Property
    Property documentoB As Boolean
        Get
            documentoB = bit_documentoB
        End Get
        Set(ByVal value As Boolean)
            bit_documentoB = value
        End Set
    End Property
    Property documentoC As Boolean
        Get
            documentoC = bit_documentoC
        End Get
        Set(ByVal value As Boolean)
            bit_documentoC = value
        End Set
    End Property

    Property registro() As cls_registro_
        Get
            If IsNothing(obj_registro) Then
                obj_registro = New cls_registro_
                If Not obj_registro.Buscar(idregistro) Then
                    obj_registro = Nothing
                End If
            End If
            registro = obj_registro
        End Get
        Set(ByVal value As cls_registro_)
            obj_registro = value
        End Set
    End Property

    Property Items() As Collections.Generic.List(Of cls_condicioniva_)
        Get
            Items = col_Items
        End Get
        Set(ByVal value As Collections.Generic.List(Of cls_condicioniva_))
            col_Items = value
        End Set
    End Property
#End Region

    Private Sub CargarColeccion(ByVal obj_Reader As SqlDataReader)
        col_Items = New Collections.Generic.List(Of cls_condicioniva_)
        While obj_Reader.Read()
            Dim Elemento As New cls_condicioniva_
            Elemento.int_idcondicioniva = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idcondicioniva")))

            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("nombre"))) = False Then
                Elemento.str_nombre = (obj_Reader.GetValue(obj_Reader.GetOrdinal("nombre")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("nombrecorto"))) = False Then
                Elemento.str_nombrecorto = (obj_Reader.GetValue(obj_Reader.GetOrdinal("nombrecorto")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistro"))) = False Then
                Elemento.int_idregistro = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistro")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idsiglafiscal"))) = False Then
                Elemento.int_idsiglafiscal = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idsiglafiscal")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("subcodigo1"))) = False Then
                Elemento.str_subcodigo1 = (obj_Reader.GetValue(obj_Reader.GetOrdinal("subcodigo1")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("subcodigo2"))) = False Then
                Elemento.str_subcodigo2 = (obj_Reader.GetValue(obj_Reader.GetOrdinal("subcodigo2")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("subcodigo3"))) = False Then
                Elemento.str_subcodigo3 = (obj_Reader.GetValue(obj_Reader.GetOrdinal("subcodigo3")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("documentoA"))) = False Then
                Elemento.bit_documentoA = (obj_Reader.GetValue(obj_Reader.GetOrdinal("documentoA")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("documentoB"))) = False Then
                Elemento.bit_documentoB = (obj_Reader.GetValue(obj_Reader.GetOrdinal("documentoB")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("documentoC"))) = False Then
                Elemento.bit_documentoC = (obj_Reader.GetValue(obj_Reader.GetOrdinal("documentoC")))
            End If

            col_Items.Add(Elemento)
        End While
    End Sub

    Public Sub CargarVariables(ByVal obj_Reader As SqlDataReader, Optional read As Boolean = True)
        Dim tabla As String = ""
        If read Then
            obj_Reader.Read()
        Else
            tabla = "condicioniva_"
        End If

        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idcondicioniva"))) = False Then
            int_idcondicioniva = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idcondicioniva")))
        End If

        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "nombre"))) = False Then
            str_nombre = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "nombre")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "nombrecorto"))) = False Then
            str_nombrecorto = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "nombrecorto")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idregistro"))) = False Then
            int_idregistro = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idregistro")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idsiglafiscal"))) = False Then
            int_idsiglafiscal = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "idsiglafiscal")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "subcodigo1"))) = False Then
            str_subcodigo1 = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "subcodigo1")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "subcodigo2"))) = False Then
            str_subcodigo2 = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "subcodigo2")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "subcodigo3"))) = False Then
            str_subcodigo3 = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "subcodigo3")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "documentoA"))) = False Then
            bit_documentoA = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "documentoA")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "documentoB"))) = False Then
            bit_documentoB = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "documentoB")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "documentoC"))) = False Then
            bit_documentoC = (obj_Reader.GetValue(obj_Reader.GetOrdinal(tabla & "documentoC")))
        End If
    End Sub

    Public Function Nuevo(Optional ByVal ObtenerID As Boolean = False) As Boolean
        Nuevo = False
        Dim obj_Conexion As New cls_Conexion
        Try
            'Creacion de registro----------------------------------------------------
            If IsNothing(obj_registro) Then
                registro = New cls_registro_
                registro.fechacreado = Now
                registro.idusuariocreado = UsuarioLOG.idusuario
                registro.fechamodificado = Now
                registro.idusuariomodificado = UsuarioLOG.idusuario
                registro.idregistroestado = 1
                registro.idusuarioregistroestado = UsuarioLOG.idusuario
                registro.Nuevo(True)
                idregistro = obj_registro.idregistro
            End If
            '------------------------------------------------------------------------

            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "condicioniva__Nuevo"
                .Parameters.Add("@nombre", SqlDbType.NVarChar).Value = str_nombre
                .Parameters.Add("@nombrecorto", SqlDbType.NVarChar).Value = str_nombrecorto
                .Parameters.Add("@idregistro", SqlDbType.Int).Value = int_idregistro
                .Parameters.Add("@idsiglafiscal", SqlDbType.Int).Value = int_idsiglafiscal
                .Parameters.Add("@subcodigo1", SqlDbType.NVarChar).Value = str_subcodigo1
                .Parameters.Add("@subcodigo2", SqlDbType.NVarChar).Value = str_subcodigo2
                .Parameters.Add("@subcodigo3", SqlDbType.NVarChar).Value = str_subcodigo3
                .Parameters.Add("@documentoA", SqlDbType.Bit).Value = bit_documentoA
                .Parameters.Add("@documentoB", SqlDbType.Bit).Value = bit_documentoB
                .Parameters.Add("@documentoC", SqlDbType.Bit).Value = bit_documentoC
                .ExecuteNonQuery()
            End With
            Nuevo = True
            If ObtenerID Then
                CargarUltimo()
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Crear el registro de condicioniva_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Function

    Public Sub Modificar()
        Dim obj_Conexion As New cls_Conexion
        Try
            'Modificacion de registro------------------------------------------------
            registro.fechamodificado = Now : registro.idusuariomodificado = UsuarioLOG.idusuario
            registro.Modificar()
            '------------------------------------------------------------------------

            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "condicioniva__Modificar"
                .Parameters.Add("@idcondicioniva", SqlDbType.Int).Value = int_idcondicioniva
                .Parameters.Add("@nombre", SqlDbType.NVarChar).Value = str_nombre
                .Parameters.Add("@nombrecorto", SqlDbType.NVarChar).Value = str_nombrecorto
                .Parameters.Add("@idregistro", SqlDbType.Int).Value = int_idregistro
                .Parameters.Add("@idsiglafiscal", SqlDbType.Int).Value = int_idsiglafiscal
                .Parameters.Add("@subcodigo1", SqlDbType.NVarChar).Value = str_subcodigo1
                .Parameters.Add("@subcodigo2", SqlDbType.NVarChar).Value = str_subcodigo2
                .Parameters.Add("@subcodigo3", SqlDbType.NVarChar).Value = str_subcodigo3
                .Parameters.Add("@documentoA", SqlDbType.Bit).Value = bit_documentoA
                .Parameters.Add("@documentoB", SqlDbType.Bit).Value = bit_documentoB
                .Parameters.Add("@documentoC", SqlDbType.Bit).Value = bit_documentoC
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Modificar el registro de condicioniva_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Sub Eliminar(ByVal idcondicioniva As Integer)
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "condicioniva__Eliminar"
                .Parameters.Add("@idcondicioniva", SqlDbType.Int).Value = idcondicioniva
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Eliminar el registro de condicioniva_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Function Buscar(ByVal idcondicioniva As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            Buscar = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "condicioniva__Buscar"
                .Parameters.Add("@idcondicioniva", SqlDbType.Int).Value = idcondicioniva
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                Buscar = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Buscar el registro de condicioniva_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function
    Public Function BuscarXsubCodigo1(ByVal subCodigo1 As String) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            BuscarXsubCodigo1 = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "condicioniva__BuscarXsubCodigo1"
                .Parameters.Add("@subCodigo1", SqlDbType.NVarChar).Value = subCodigo1
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                BuscarXsubCodigo1 = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al BuscarXsubCodigo1 el registro de condicioniva_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Sub CargarUltimo()
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "condicioniva__CargarUltimo"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarUltimo registro de condicioniva_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Sub

    Public Function CargarTodos(Optional ByVal idregistroestado As Integer = 1) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarTodos = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "condicioniva__CargarTodos"
                .Parameters.Add("@idregistroestado", SqlDbType.Int).Value = idregistroestado
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarTodos = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarTodos los registros de condicioniva_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function Clone() As Object Implements System.ICloneable.Clone
        Dim obj_condicioniva_Clon As New cls_condicioniva_
        obj_condicioniva_Clon.int_idcondicioniva = Me.int_idcondicioniva
        obj_condicioniva_Clon.str_nombre = Me.str_nombre
        obj_condicioniva_Clon.str_nombrecorto = Me.str_nombrecorto
        obj_condicioniva_Clon.int_idregistro = Me.int_idregistro
        obj_condicioniva_Clon.int_idsiglafiscal = Me.int_idsiglafiscal
        obj_condicioniva_Clon.col_Items = Me.col_Items
        obj_condicioniva_Clon.str_subcodigo1 = Me.str_subcodigo1
        obj_condicioniva_Clon.str_subcodigo2 = Me.str_subcodigo2
        obj_condicioniva_Clon.str_subcodigo3 = Me.str_subcodigo3
        obj_condicioniva_Clon.bit_documentoA = Me.bit_documentoA
        obj_condicioniva_Clon.bit_documentoB = Me.bit_documentoB
        obj_condicioniva_Clon.bit_documentoC = Me.bit_documentoC
        Return obj_condicioniva_Clon
    End Function

End Class
